As used herein, peer-to-peer networks which are one of the subjects of the present invention comprise multiple nodes, each node typically consisting both of file server and client that can send and receive data or “Communication messages” to or from a node to which such is connected and other nodes on the network. Common peer-to-peer networks and software applications are Gnutella, FastTrack, Edonkey, NeoNet, Kazaa, Limewire. Morpheus, Bear Share, Bit. Torrent, Shareaza, Emule, and Freenet. This list is not inclusive of all peer-to-peer file applications but rather serves as a general list.
In some peer-to-peer networks, each node is connected to other nodes over a communication medium such as the Internet either directly or through some type of proxy. For example, when a search request is issued such originating node sends a search request to all of the nodes to which it is connected, (see FIG. 1) These nodes search their list of available files and if a match is found they send a response back with the location. However, a peer-to-peer proxy network typically consists of node A which is connected to a node B and node B is connected to a node C. (see FIG. 2) Node A is not connected to node C such that if node A issues a search request it will be forwarded to node B and Node B will search its available files and if a match is found it will send a response back to node A. Node B will then forward node A's request to node C and Node C will search its available files and if a match is found it will send a response back to node B. Node B will then forward this response to node A. FIG. 3 discloses a nonproxy loop network wherein each node is directly connected to another.
Some peer-to-peer networks utilize a leaf node/main node proxy topology (See FIG. 4) where some nodes are classified as main nodes and the remaining nodes are classified as leaf nodes. Leaf nodes can only connect to main nodes. Only main nodes can connect to other main nodes. When a leaf node issues a search request it sends the request to the main node that it is connected to. The main node then forwards the request to any other leaf nodes that are connected to it and also to any main nodes it is connected to. These main nodes forward the request to any leaf nodes that are connected to them. Common names for main nodes are super nodes, ultra peers, or hubs.
Referring to FIG. 5, some peer-to-peer networks can be quite large, often in the hundreds of thousands or millions of nodes. To reduce the bandwidth and other resources required to operate such networks, nodes restrict the “distance” of messages traveling the network. Messages such as searches and responses to searches from nodes contain transmission distance parameters such as hops and time to live to help limit the number of nodes that see and process these messages. One is Hops, which is a value that normally starts at 0 and increments each time the communications is forwarded. Another is Time to Live (TTL) which is a value that normally starts at 5 and is decremented each time the communications is forwarded. When the Bops value reaches a preset limit, often 5, or Time to Live reaches 0, the communications is dropped from the network. Often nodes have a “Max time to live” setting and this value is often set to 5. If a node receives a communication message with a Time to Live which is higher than its configured max Time to Live, the packet is either dropped from the network or the communication message Time to Live is changed to a smaller value from another node. This effectively enforces a community time to live value and limits the amount of nodes that would receive communication message from a transmitting node. Some networks have other mechanisms for limiting the search capabilities of users. Referring to FIG. 5, if the network were configured for 5 hops, Node A would issue a search. Node B would receive it and pass it to Node C. This repeats until Node F receives it. Nodes B-F would process the search and Node F would drop and not forward the search to Node G because it was retransmitted 5 times.
Each node on a peer-to-peer network generally has 2-3 connections to the peer-to-peer network so that they can increase their odds of finding information. Because each connection is to a random node on the peer-to-peer network, each connection generally searches & different group of nodes. Because searches are “repeated” by nodes on the network, sometimes connections have overlapping coverage in that a search sent out via one connection searches nodes available on another connection. This is known as an inefficient connection configuration.
Because the network enforces restrictions when a user searches and because of the nature of the architecture, the user can only search a limited number of nodes on the network. For instance, if the network is composed of twelve million users, a user searching for information may only be able to search 3,000 other users. If the user is searching for a file that is not popular it may not be within the searching radius of the user and the file will not be found, even if it is located on another node elsewhere on the network. It would therefore be advantageous if a user could search more nodes on a network then they normally could with a standard peer-to-peer application or system, thus raising the chance that they would find the information they are looking for.